{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "f586ed03",
   "metadata": {},
   "source": [
    "# 远程推理应用开发示例1\n",
    "\n",
    "本示例使用LeNet模型远程推理，进行手写数字识别，以图片方式显示结果，简要说明了基于Atlas 200DK 开发板的远程推理应用开发方法之一。\n",
    "\n",
    "## 主要特点：\n",
    "\n",
    "1. 编写代码获取输入，如读取读片（目录）、摄像图或视频文件，须分别另行编码实现。本示例使用图片目录；\n",
    "2. 构造LeNet模型算法对象，调用远程推理接口，多线程推理须另行编码实现；\n",
    "3. 编码对结果进行后续处理或展示，本示例以图片形式进行展示。\n",
    "\n",
    "## 远程推理平台\n",
    "本示例与所使用的远程推理集群服务器均运行在华为云ECS服务器上，集群中的12台Atlas200DK开发板部署于电子科技大学校园。\n",
    "\n",
    "## 代码示例\n",
    "【提醒】：注意修改 RemoteIP 和 测试输入 设置。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e81ecbab",
   "metadata": {},
   "source": [
    "### 1. 导入软件包 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "ef5e9db9",
   "metadata": {},
   "outputs": [],
   "source": [
    "\"\"\"\n",
    "Inferemote: a Remote Inference Toolkit for Atlas 200DK\n",
    "\n",
    "\"\"\"\n",
    "import os\n",
    "import cv2 as cv\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d92598ca",
   "metadata": {},
   "source": [
    "### 2. 实例化LeNet应用算法的对象"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "140a0ed1",
   "metadata": {},
   "outputs": [],
   "source": [
    "''' New an algorithm instance'''\n",
    "from inferemote.airlab import LeNet\n",
    "air = LeNet()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0496ec1d",
   "metadata": {},
   "source": [
    "### 3. 远程推理设置"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "273d026b",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "03-18 17:22:20 [INFO]  -atlas- Trying model inference on REMOTE ``192.168.1.123''...\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<tcp_remote.TcpRemote at 0x7face87efca0>"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "''' 指定华为ECS远程推理集群服务器IP地址和模型的服务端口 '''\n",
    "remote = '192.168.1.123'\n",
    "\n",
    "''' 关联远程推理端 '''\n",
    "air.use_remote(remote)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dedf794c",
   "metadata": {},
   "source": [
    "### 4. 设置输入图片目录"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "a1eefa7e",
   "metadata": {},
   "outputs": [],
   "source": [
    "''' Read inputs from directory '''\n",
    "\n",
    "path = './data/mnist'"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "56db1cc0",
   "metadata": {},
   "source": [
    "### 5. 辅助函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "c87eb183",
   "metadata": {},
   "outputs": [],
   "source": [
    "''' 需要对图片文件、图片目录、视频文件、摄像头等分别编码处理 '''\n",
    "\n",
    "def get_picture_list(path):\n",
    "    ''' 获取图片列表 '''\n",
    "    IMG_EXT = ['.jpg', '.JPG', '.png', '.PNG', '.bmp', '.BMP', '.jpeg', '.JPEG']\n",
    "\n",
    "    if os.path.isdir(path):\n",
    "        file_list = [os.path.join(path, img) for img in os.listdir(path)\n",
    "                    if os.path.splitext(img)[1] in IMG_EXT]\n",
    "    return file_list\n",
    "    \n",
    "def show_result(image):\n",
    "    ''' 显示处理结果图片 '''\n",
    "    from  matplotlib import pyplot as plt\n",
    "    image = image [:,:,::-1]         # transform image to rgb\n",
    "    plt.imshow(image)\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dd4bbe26",
   "metadata": {},
   "source": [
    "### 6. 进行远程推理并显示结果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "8e97e65d",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "03-18 17:22:27 [INFO]  -atlas- Time costs: 0.004/0.021/0.001(s) and 0.026(s) for pre/remote/post and totally.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "NUMBER:  1\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "03-18 17:22:28 [INFO]  -atlas- Time costs: 0.000/0.015/0.000(s) and 0.016(s) for pre/remote/post and totally.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "NUMBER:  7\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "03-18 17:22:28 [INFO]  -atlas- Time costs: 0.000/0.015/0.000(s) and 0.015(s) for pre/remote/post and totally.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "NUMBER:  9\n"
     ]
    },
    {
     "data": {
      "image/png": "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gggAILA4xQMAACyHgAIAACyHgAIAACyHgAIAACyHgAIAACyHgAIAACyHgAIAACyHgAIAACyHgAIAACyHgAIAACyHgAIAACyHgAIAACyHgAIAACyHgAIAACyHgAIAACyHgAIAACyHgAIAACyHgAIAACyHgAIAACyHgAIAACyHgAIAACyHgAIAACyHgAIAACyHgAIAACyHgAIAACzHEeoCcGozRqr5rP23odfbS8UAACyjS0dQVqxYoXPPPVf9+/dXYmKirrjiCpWVlfmNOXr0qPLy8jRw4ED169dPc+fOVVVVld+YiooKzZw5U3369FFiYqLuuOMOtbS09LwbhB1vqzR/wtmaP2HsSR9XTRwrY2yhLhUA0Iu6FFCKioqUl5enLVu2aMOGDWpubtZll12mhoYG35hbb71Vr776ql544QUVFRXpwIEDuvLKK33rW1tbNXPmTDU1Nem///u/9fvf/16rVq3SsmXLAtcVAAAIazZjjOnukw8dOqTExEQVFRXp4osvVm1trQYPHqxnn31W3/zmNyVJH374oUaPHq3i4mKdd955eu211/SNb3xDBw4cUFJSkiTpySef1J133qlDhw4pJiamw9f1eDxyu91KdadraO0Y9bH1624L6KFX/vmunLHdfguptUWakT5BEkdITnUNpk6fJnykf1bvVnR0tHrwqwmAxdXW1srlcrU7pkcXydbW1kqSEhISJEklJSVqbm5WVlaWb8yoUaOUnp6u4uJiSVJxcbHGjRvnCyeSNH36dHk8Hu3atavN12lsbJTH4/F7SJKnoVZG/BIDACDSdDugeL1e3XLLLbrgggs0duxYSVJlZaViYmIUHx/vNzYpKUmVlZW+Mf8aTo6vP76uLStWrJDb7fY90tLSJEmxzrjulg8AACys2wElLy9PO3fu1OrVqwNZT5sKCgpUW1vre+zbt0+SFOOIkY1TAwAARJxu3Wacn5+vtWvXavPmzTr99NN9y5OTk9XU1KSamhq/oyhVVVVKTk72jXnrrbf8tnf8Lp/jY77K6XTK6XR2p1QAABCGunQExRij/Px8vfTSS9q4caOGDRvmt37SpEmKjo5WYWGhb1lZWZkqKiqUmZkpScrMzNSOHTtUXV3tG7Nhwwa5XC6NGTOmJ70AAIAI0aUjKHl5eXr22Wf18ssvq3///r5rRtxut+Li4uR2u7Vo0SItXbpU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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "''' Processing the results '''\n",
    "for pic in get_picture_list(path):\n",
    "    \n",
    "    frame = cv.imread(pic)\n",
    "    \n",
    "    ''' 调用模型的远程推理接口 '''\n",
    "    result = air.inference_remote(frame)\n",
    "    \n",
    "    ''' 合并图像屏显示 '''\n",
    "    image = air.make_image(result, frame.shape[:2])\n",
    "    image = np.hstack([frame, image])\n",
    "    show_result(image)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "9dd47931",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Ends."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b844cf12",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
